#include <cassert>
#include <iostream>
#include "person.h"
using namespace std;

int main() {
	// 测试无参数构造函数
	Person person1;
	assert(person1.GetId() == 0);
	assert(person1.GetName() == "unknown");

	// 测试有参数构造函数
	Person person2(1, "Alice");
	assert(person2.GetId() == 1);
	assert(person2.GetName() == "Alice");

	// 测试拷贝构造函数
	Person person3 = person2;
	assert(person3.GetId() == 1);
	assert(person3.GetName() == "Alice");

	// 测试赋值运算符
	Person person4;
	person4 = person3;
	assert(person4.GetId() == 1);
	assert(person4.GetName() == "Alice");

	// 测试等于运算符
	assert(person3 == person4);

	// // 测试输出运算符
	// std::stringstream ss;
	// ss << person3;
	// assert(ss.str() == "Person {id:1,name:Alice}");

	// 测试析构函数
	{
		Person person5(2, "Bob");
		// 析构函数会在person5作用域结束时被调用
	}
	// 析构函数的输出应该被看到

	cout << "All test cases pass" << endl;
	return 0;
}
